package clue.players;

import org.javatuples.Triplet;

import clue.cards.Card;
import clue.engine.GameState;
import clue.enums.Room;
import clue.enums.Suspect;
import clue.enums.Weapon;

/**
 *
 * @author Shawn
 */
public abstract class Player {
	public abstract void gameStarted(GameState gs);
	public abstract Room move(GameState gs);
	public abstract Triplet<Room, Suspect, Weapon> suggest(GameState gs);
	public abstract Card refute(
			GameState gs,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informMove(
			GameState gs,
			Integer movingPlayerID,
			Room room
			);
	public abstract void informSuggestion(
			GameState gs,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informFailureToRefute(
			GameState gs,
			Integer failedPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void informRefutation(
			GameState gs,
			Integer refutingPlayerID,
			Card refutingCard
			);
	public abstract void informRefutationHidden(
			GameState gs,
			Integer refutingPlayerID,
			Integer suggestingPlayerID,
			Triplet<Room, Suspect, Weapon> suggestion
			);
	public abstract void gameEnded(
			GameState gs,
			Integer winnerID,
			Triplet<Room, Suspect, Weapon> winningAccusation
			);
	public abstract void informFailedAccusation(
			GameState gs,
			Integer failedPlayerID,
			Triplet<Room, Suspect, Weapon> failedAccusation
			);
	public abstract Triplet<Room, Suspect, Weapon> accuse(GameState gs);
}
